package com.vecspace.jsmodel;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
/**
 * @author: wanghua
 */
public class SqlParam {
	/**查询语句，用?作为参数占位符*/
	private String sql;
	/**参数，与sql中的?的个数一致*/
	private List<Object> parameters = new ArrayList<Object>();  
	
	private int maxParamIndex;//jpa占位符的索引号的最大值 ?1 ?3 
	/**
	 * 获取拼接的sql，使用?做占位符
	 * @return 
	 * @author: wanghua
	 */
	public String getSql() {
		return sql==null?"":sql;
	}
	public void setSql(String sql, int maxParamIndex) {
		this.sql = sql;
		this.maxParamIndex = maxParamIndex;
	}
	/**
	 * 获取拼接的sql中的占位符的值。值的个数与sql中?的个数一致
	 * 
	 * @return 返回一个list（不允许返回null） 
	 * @author: wanghua
	 */
	public List<Object> getParameter() {
		if(parameters == null) {
			parameters = new ArrayList<Object>();
		}
		return parameters;
	}

	public void addParameter(Object parameter){
		if(parameters == null) {
			parameters = new ArrayList<Object>();
		}
		parameters.add(parameter);
	}
	
	/**
	 * 
	 * @param params 
	 * @author: wanghua
	 */
	public void addParameters(List<Object> params){
		if(params == null || params.size() ==0) {
			return;
		}
		if(parameters == null) {
			parameters = new ArrayList<Object>();
		}
		for(Object parameter : params){
			parameters.add(parameter);
		}
	}
	
	/**
	 * 判断此参数是否有效，
	 * 无效情况：1、sql为空，2sql中?的个数与parameters的长度不一致
	 * @return 
	 * @author: wanghua
	 */
	public boolean valid(){
		if(StringUtils.isEmpty(sql)) {
			return false;
		}
		if(parameters != null && StringUtils.countMatches(sql, "?") != parameters.size()) {
			return false;
		}
		return true;
	}
	@Override
	public String toString(){
		return sql +":"+ ArrayUtils.toString(parameters, "null");
	}
	public int getMaxParamIndex() {
		return maxParamIndex;
	}
	public void setMaxParamIndex(int maxParamIndex) {
		this.maxParamIndex = maxParamIndex;
	}
	
	
}
